package pers.chao.tool.infrastructure.regex;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Description: 正则表达式简单工具
 *
 * @author W.Chao
 * @date 2020/11/12 23:36
 **/
public final class RegexUtil {
	private RegexUtil() {
	}

	/**
	 * 判断是否匹配正则
	 *
	 * @param regex 正则表达式
	 * @param text  要匹配的字符串
	 * @return {@code true}: 匹配<br>{@code false}: 不匹配
	 */
	public static boolean isMatch(String regex, CharSequence text) {
		return RegexUtil.isMatch(regex, text);
	}

	/**
	 * 获取正则匹配的部分
	 *
	 * @param regex 正则表达式
	 * @param text  要匹配的字符串
	 * @return 正则匹配的部分
	 */
	public static List<String> getMatches(String regex, CharSequence text) {
		if (text == null) return null;
		List<String> matches = new ArrayList<>();
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(text);
		while (matcher.find()) {
			matches.add(matcher.group());
		}
		return matches;
	}

	/**
	 * 获取正则匹配分组
	 *
	 * @param text  要分组的字符串
	 * @param regex 正则表达式
	 * @return 正则匹配分组
	 */
	public static String[] getSplits(String text, String regex) {
		if (text == null) return null;
		return text.split(regex);
	}

	/**
	 * 替换正则匹配的第一部分
	 *
	 * @param text        要替换的字符串
	 * @param regex       正则表达式
	 * @param replacement 代替者
	 * @return 替换正则匹配的第一部分
	 */
	public static String getReplaceFirst(String text, String regex, String replacement) {
		if (text == null) return null;
		return Pattern.compile(regex).matcher(text).replaceFirst(replacement);
	}

	/**
	 * 替换所有正则匹配的部分
	 *
	 * @param text        要替换的字符串
	 * @param regex       正则表达式
	 * @param replacement 代替者
	 * @return 替换所有正则匹配的部分
	 */
	public static String getReplaceAll(String text, String regex, String replacement) {
		if (text == null) return null;
		return Pattern.compile(regex).matcher(text).replaceAll(replacement);
	}

	/**
	 * 移除括号及所有的括号内的的内容
	 *
	 * @param text 输入字符串
	 * @return 输出字符串
	 */
	public static String removeContentInBrackets(String text) {
		return text.replaceAll("\\(.*?\\)|\\{.*?}|\\[.*?]|（.*?）", "");
	}
}
